
/////////////////////////////////////////////////////////////////////////////////
//
//  指针函数 和 函数指针
//
/////////////////////////////////////////////////////////////////////////////////
#include<iostream>

typedef struct{
     int a;
     int b;
}Data;

// 指针函数
Data* f(int a, int b)
{
     Data *data = new Data;
     data->a = a;
     data->b = b;
     return data;
}

int add(int x, int y)
{
    return x + y;
}

int sub(int x, int y)
{
    return x - y;
}

// 函数指针
int (*fun)(int x, int y);


int main(int argc, const char *argv[])
{
     Data *myData = f(4, 5);
     std::cout << "f(4,5)= " << myData->a << ", " << myData->b<< std::endl;

    //第一种写法
    fun = add;
    std::cout << "(*fun)(1,2) = " << (*fun)(1,2) << std::endl;

    //第二种写法
    fun = &sub;
    std::cout << "fun(1,2) = " << fun(1,2) << std::endl;

     return 0;
}
